#!/bin/bash
ViimeiseksiLiitettyLevy=$(sudo ls -l /dev/disk/by-id | sort -r --key=8 | grep usb | grep -om 1 sd.$)
SenSuurinOsio=$(lsblk -m | grep -v ^sd | grep $ViimeiseksiLiitettyLevy | sort -r --key=2 | head -1 | awk '{print $1}' | grep -o sd.*) # nimenomaan välttää EFI-osiota
echo 'viimeiseksi järjestelmään liitetyn USB-muistin laitenimi: '$ViimeiseksiLiitettyLevy'  ja sen suurin osio: '$SenSuurinOsio'  tiedostotyyppi:'$(sudo blkid -o value -s TYPE /dev/$SenSuurinOsio)
echo 'sen todellinen nimi:'$(ls -l /dev/disk/by-id | grep $ViimeiseksiLiitettyLevy$ | awk '{print $9}')
echo 'sen laiteportti on tyyppiä: '$(sudo lsusb -v | grep -A 5 $(dmesg | grep Manufacturer: | awk 'END{print $5}') | awk '/bcdUSB/{print $2}')
sudo mount -t auto /dev/$SenSuurinOsio /mnt 
sudo chown $USER:$USER /mnt # eipä lupia kannata kysellä kun useimmat eivät käsitä koko käyttö-oikeus asiaa  
echo ' ' > /mnt/koetiedosto ; chmod u+rw /mnt/koetiedosto
echo;echo 'mennään mittaamaan nopeuksia ja se saattaa kestää minuutinkin';echo 

sync # jos buffereissa on vielä jotakin muiden tehtävien hommia pakotetaan ne ensin pois mittausta sotkemasta 
Alkuhetki=$(date +%s.%N)
seq -s vapaavalintainenteksti 1 5000000 > /mnt/koetiedosto 
sync # tämä kirjoittaa levylle cachesta kaiken joka on uudempaa kuin levyllä jo oleva.
sudo sh -c "$(which echo) 3 > /proc/sys/vm/drop_caches" # tämä tyhjentää bufferit. tuloksen voi tarkistaa käskyllä: free -m .
# drop-caches:ille ei voi palauttaa arvoa 0, mutta silti niitä buffereita täytetään heti uudestaan kuten voit tarkistaa lukemalla levyltä jotakin ja tulostamalla: free -m.
Loppuhetki=$(date +%s.%N)
tiedostonkoko=$(echo $(stat -c%s /mnt/koetiedosto)*8/1000000 | bc -l); echo 'tiedostonkoko megabittiä: '$tiedostonkoko 
aikasekunteina=$(echo $Loppuhetki-$Alkuhetki | bc -l); echo 'Aika sekunteina: '$aikasekunteina 
tiedonsiirronnopeus=$(echo $tiedostonkoko'/'$aikasekunteina | bc -l)
echo 'kirjoitusnopeus megabittiä sekunnissa (tuolle muistitikulle siinä portissa kun se on) = '$tiedonsiirronnopeus

echo
sync 
sudo sh -c "$(which echo) 3 > /proc/sys/vm/drop_caches" 
Alkuhetki=$(date +%s.%N)
cat /mnt/koetiedosto > /dev/null
sync
Loppuhetki=$(date +%s.%N)
tiedostonkoko=$(echo $(stat -c%s /mnt/koetiedosto)*8/1000000 | bc -l); echo 'tiedostonkoko megabittiä: '$tiedostonkoko 
aikasekunteina=$(echo $Loppuhetki-$Alkuhetki | bc -l); echo 'Aika sekunteina: '$aikasekunteina 
tiedonsiirronnopeus=$(echo $tiedostonkoko'/'$aikasekunteina | bc -l)
echo 'lukunopeus megabittiä sekunnissa (tuolta muistitikulta siinä portissa kun se on) = '$tiedonsiirronnopeus

rm /mnt/koetiedosto
sudo umount /mnt
 
# sudo fdisk -l | grep ^/dev/sda | sort --key=4 | head -1 | grep -Po '(?<=/dev/sda)[0-9]*' # = suurin /dev/sda[0-9]-partitio
